package com.zenchn.generic;

import java.util.List;

/**
 * GenericService的实现类, 其他的自定义 ServiceImpl, 继承自它,可以获得常用的增删查改操作,
 * 未实现的方法有 子类各自实现
 * <p/>
 * Model : 代表数据库中的表 映射的Java对象类型
 * PK :代表对象的主键类型
 *
 * @author dingxinfa
 * @date 2018-06-27
 */
public abstract class GenericServiceImpl<Model, PK, Example> implements GenericService<Model, PK, Example> {

    /**
     * 定义成抽象方法,由子类实现,完成dao的注入
     *
     * @return GenericDao实现类
     */
    public abstract GenericDao<Model, PK, Example> getDao();

    @Override
    public long countByExample(Example example) {
        return getDao().countByExample(example);
    }

    @Override
    public int deleteByExample(Example example) {
        return getDao().deleteByExample(example);
    }

    @Override
    public int deleteByPrimaryKey(PK id) {
        return getDao().deleteByPrimaryKey(id);
    }

    @Override
    public int insert(Model model) {
        return getDao().insert(model);
    }

    @Override
    public int insertSelective(Model model) {
        return getDao().insertSelective(model);
    }

    @Override
    public List<Model> selectByExample(Example example) {
        return getDao().selectByExample(example);
    }

    @Override
    public Model selectByPrimaryKey(PK id) {
        return getDao().selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(Model model) {
        return getDao().updateByPrimaryKeySelective(model);
    }

    @Override
    public int updateByExampleSelective(Model model, Example example) {
        return getDao().updateByExampleSelective(model, example);
    }

    @Override
    public int updateByExample(Model model, Example example) {
        return getDao().updateByExample(model, example);
    }

    @Override
    public int updateByPrimaryKey(Model model) {
        return getDao().updateByPrimaryKey(model);
    }
}
